FN.DEF STG$(v) FN.RTN LEFT$(STR$(v),IS_IN(".",STR$(v))-1) FN.END !'TIME y$,m$,d$ !'d$ = y$+m$+d$ !'IF d$ > "20140430" THEN !' POPUP "Beta expired. Thanks for your help",0,0,1 !' EXIT !'END IF VER$="v0.1" PORT=6369 TIMOUT=500 %' time-out of TCP/IP server in ms DELAY=3000 %' delay to make "myPC connected" disappear DQ$=CHR$(34) LF$=CHR$(10) WAKELOCK 1 %' CPU still on when screen goes off GR.OPEN 255,255,255,255,1 GR.ORIENTATION -1 %' depends on the sensor GR.SCREEN real_w, real_h IF real_w"" & offline THEN offline=0 GR.SHOW tu2 GR.SHOW tu3 GR.SHOW tm1 GR.HIDE tm2 END IF IF computerName$<>"" & CLOCK() > disappearClock THEN %' Handle client popup computerName$="" GR.HIDE tm2 ENDIF GOSUB DetectScreenOrientationChange IF !BACKGROUND() THEN GR.RENDER IF offline THEN GOTO Loop IF !server THEN %' Offer UDP broadcast (discovery) service SOCKET.CLIENT.STATUS flag GOSUB DetectScreenOrientationChange IF flag THEN %' Client connected! SOCKET.SERVER.CREATE PORT %' Create TCP/IP server SOCKET.SERVER.CONNECT 0 server=1 %' Used to close server if user exits app expireClock = CLOCK() + TIMOUT disappearClock = CLOCK() + DELAY END IF END IF IF !server THEN GOTO Loop SOCKET.SERVER.STATUS st %' Offer TCP/IP WAF service IF st = 3 THEN %' connected GOSUB DetectScreenOrientationChange SOCKET.SERVER.READ.READY flag IF flag THEN GOSUB DetectScreenOrientationChange SOCKET.SERVER.READ.LINE cmd$ DEBUG.PRINT ">> " + cmd$ i = IS_IN("``", cmd$) IF i THEN t$ = LEFT$(cmd$, i-1) cmd$ = MID$(cmd$, i+2) IF t$<>computerName$ THEN %' New client is connected computerName$=t$ t$=computerName$ + " connected" GR.MODIFY tm2, "text", t$ GR.TEXT.WIDTH tm2w, t$ IF real_w "http" THEN t$ = "file://" + t$ BROWSE t$ ELSEIF LOWER$(cmd$) = "listapps" THEN %' LISTAPPS command answer$ = AllApps$ ELSEIF IS_IN("uninstall ", LOWER$(cmd$)) = 1 THEN %' UNINSTALL command t$ = MID$(cmd$, 11) IF !IS_IN(t$ + "/", AllApps$) THEN answer$ = "Unknown package. Use " + DQ$ + "waf listapps" + DQ$ GOTO Answer ELSE t$ = "am start -a android.intent.action.DELETE -d package:" + t$ GOTO ShellCommand END IF ELSEIF IS_IN("launch ", LOWER$(cmd$)) = 1 THEN %' LAUNCH command t$ = MID$(cmd$, 8) IF !IS_IN(t$, AllApps$) | !IS_IN("/", t$) THEN answer$ = "Unknown package/.activity - Use " + DQ$ + "waf listapps" + DQ$ GOTO Answer ELSE t$ = "am start -n " + t$ GOTO ShellCommand END IF ELSEIF IS_IN("shell ", LOWER$(cmd$)) = 1 THEN %' SHELL command t$ = MID$(cmd$, 7) ShellCommand: SYSTEM.OPEN SYSTEM.WRITE t$ PAUSE 100 DO SYSTEM.READ.LINE l$ IF l$<>"" THEN answer$ += l$ + LF$ SYSTEM.READ.READY ready UNTIL !ready SYSTEM.CLOSE IF answer$="" & !IS_IN(" --user 0", t$) THEN t$ += " --user 0" GOTO ShellCommand END IF ELSEIF IS_IN("pull ", LOWER$(cmd$)) = 1 THEN %' PULL command t$ = MID$(cmd$, 6) %' get path of file to pull IF LEFT$(t$, 1) <> "/" THEN answer$ = "Wrong Android path. Must start with /" GOTO Answer END IF fe=0 WHILE IS_IN("/", t$, 2) t$ = MID$(t$, IS_IN("/", t$, 2)) FILE.EXISTS fe, "../.." + t$ IF fe THEN W_R.BREAK REPEAT IF !fe THEN answer$ = "No such file or Access denied" GOTO Answer END IF BYTE.OPEN r, fid, "../.." + t$ SOCKET.SERVER.WRITE.FILE fid BYTE.CLOSE fid GOTO Answered ELSEIF IS_IN("push ", LOWER$(cmd$)) = 1 THEN %' PUSH command t$ = MID$(cmd$, 6) %' get path of file to save i = IS_IN(">", t$) IF !i THEN GOTO Answered %' unexpected filesize = VAL(MID$(t$, i+1)) t$ = LEFT$(t$, i-1) IF LEFT$(t$, 1) <> "/" THEN answer$ = "Wrong Android path. Must start with /" GOTO Answer END IF i=1 WHILE IS_IN("/", t$, i+1) i = IS_IN("/", t$, i+1) REPEAT path$ = LEFT$(t$, i) file$ = MID$(t$, i+1) fe=0 t$ = path$ WHILE IS_IN("/", t$, 2) t$ = MID$(t$, IS_IN("/", t$, 2)) FILE.EXISTS fe, "../.." + t$ IF fe THEN W_R.BREAK REPEAT IF !fe THEN answer$ = "Target folder doesn't exist or Access denied" GOTO Answer END IF path$ = "../.." + t$ !' So far, everything's good, se we will !' initiate transfer of the file itself maxclock = CLOCK() + 5*DELAY fs=0 DO SOCKET.SERVER.READ.READY flag IF flag THEN BYTE.OPEN w, fid, path$ + file$ SOCKET.SERVER.READ.FILE fid BYTE.CLOSE fid FILE.SIZE fs, path$ + file$ END IF UNTIL fs | CLOCK() > maxclock !' At this time, socket is most probably closed !' because of time out, we can't send result back IF fs <> filesize THEN FILE.DELETE fd, path$ + file$ GOTO Answered %' So we skip the answer & wait for a new request ELSEIF IS_IN("install ", LOWER$(cmd$)) = 1 THEN %' INSTALL command t$ = MID$(cmd$, 9) filesize = VAL(t$) maxclock = CLOCK() + 5*DELAY fs=0 DO SOCKET.SERVER.READ.READY flag IF flag THEN BYTE.OPEN w, fid, "temp.apk" SOCKET.SERVER.READ.FILE fid BYTE.CLOSE fid FILE.SIZE fs, "temp.apk" END IF UNTIL fs | CLOCK() > maxclock !' At this time, socket is most probably closed !' because of time out, we can't send result back IF fs <> filesize THEN FILE.DELETE fd, "temp.apk" APP.INSTALL %' launches the install of /sdcard/waf/data/temp.apk GOTO Answered %' So we skip the answer & wait for a new request ELSEIF LOWER$(cmd$) = "start-server" THEN %' START-SERVER command SOCKET.SERVER.WRITE.BYTES "Server already running. Restarted it" SOCKET.SERVER.DISCONNECT SOCKET.SERVER.CLOSE server=0 computerName$="" GR.HIDE tm2 AllApps$ = VERSION$() GOTO Loop ELSEIF LOWER$(cmd$) = "kill-server" THEN %' KILL-SERVER command SOCKET.SERVER.WRITE.BYTES "Server killed" SOCKET.SERVER.DISCONNECT SOCKET.SERVER.CLOSE EXIT ELSEIF IS_IN("popup ", LOWER$(cmd$)) = 1 THEN %' POPUP command POPUP MID$(cmd$, 7),0,0,1 answer$ = "Popup displayed" ELSEIF IS_IN("vibrate ", LOWER$(cmd$)) = 1 THEN %' VIBRATE command t$ = MID$(cmd$, 9) DIM va[2*LEN(t$)] FOR i=1 TO LEN(t$) %' Decompose Morse code c$=MID$(t$,i,1) IF c$="." THEN %' DOT va[2*i-1]=100 %' = short pause va[2*i] =100 %' then short vibrate ELSEIF c$="-" THEN %' DASH va[2*i-1]=100 %' = short pause va[2*i] =300 %' then long vibrate ELSEIF c$=" " THEN %' PAUSE va[2*i-1]=300 %' = long pause va[2*i] =0 %' and no vibrate END IF NEXT VIBRATE va[], -1 %' play just once UNDIM va[] answer$ = "Vibrate ok" ELSE %' UNKNOWN command answer$ = "Unknown command" !' ** END OF PARSER: SEND TCP/IP ANSWER ** END IF Answer: DEBUG.PRINT "<< " + answer$ SOCKET.SERVER.WRITE.BYTES answer$ Answered: disappearClock = CLOCK() + DELAY END IF %' end of well formatted command "PCname``myCmd" END IF %' end of SOCKET.SERVER.READ.READY END IF %' end of SOCKET.SERVER.STATUS = 3 GOSUB DetectScreenOrientationChange IF CLOCK() > expireClock THEN SOCKET.SERVER.DISCONNECT SOCKET.SERVER.CLOSE server=0 %' Disconnected by time-out ENDIF Loop: UNTIL 0 DetectScreenOrientationChange: GR.SCREEN w,h,dpi IF w<>real_w THEN %' Screen was tilted real_w=w real_h=h IF real_w=di_w-119-25 & y>=di_h-50-71 & x<=di_w & y<=di_h-50 THEN IF server THEN SOCKET.SERVER.DISCONNECT SOCKET.SERVER.CLOSE END IF GR.CLOSE !'END "-User tapped Exit-" EXIT !' ToDo:simu-click END IF END IF GR.ONGRTOUCH.RESUME OnBackKey: BACK.RESUME OnBackGround: IF BACKGROUND() THEN IF offline THEN EXIT NOTIFY "Wireless Android Framework", "Running in background", "Running in background", 0 END IF BACKGROUND.RESUME